home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / info / oo-browser.info-2 < prev    next >
Encoding:
GNU Info File  |  1995-09-01  |  48.5 KB  |  1,203 lines

  1. This is Info file ../info/oo-browser.info, produced by Makeinfo-1.63
  2. from the input file oo-browser.texi.
  3.  
  4. 
  5. File: oo-browser.info,  Node: Graphical Browsing,  Prev: Completing Names,  Up: Usage
  6.  
  7. Graphical OO-Browser Interfaces
  8. ===============================
  9.  
  10.    The X interface to the OO-Browser is called, "xoobr".  It provides a
  11. simple but effective means of navigating through OO-Browser hierarchy
  12. and element relations.  (The NEXTSTEP OO-Browser is very similar to the
  13. X version, so use the documentation herein if you need any help with
  14. it.)
  15.  
  16.    Any number of xoobr sessions may be established at the same time.
  17. Each one is used to gain a particular view on an Environment.  The
  18. textual OO-Browser is used to filter a set of classes for display in an
  19. xoobr process.  For this reason, xoobr is invoked from within the
  20. textual OO-Browser.
  21.  
  22.    If running under the X window system, Action Key click on the
  23. following filename to view a picture of the X OO-Browser:
  24. "im/oobr-x.xwd".
  25.  
  26.    {`M-g'} `(br-tree-graph)' displays the current listing buffer's
  27. entries in a graphical form.  It ignores the show features setting so
  28. that you can capture the current listing without the need to alter that
  29. setting.
  30.  
  31.    {`M-d'} `(br-tree)' selects the current class and displays its
  32. descendancy graph in tree-form by starting a new xoobr session.  With a
  33. prefix argument, {`C-u M-d'}, displays descendancy trees for all
  34. classes at the current browser level.  They are all grouped under some
  35. imaginary joining node so as to maintain the concept of one tree per
  36. xoobr view.
  37.  
  38.    {`M-f'} `(br-tree-features-toggle)' is used before creating a
  39. graphical descendency view to determine whether or not to include the
  40. features of each class in the listing as child nodes of the class.  It
  41. toggles between showing features and not showing them in descendancy
  42. views.  The setting applies across all OO-Browser languages.  The
  43. default setting is to not add features to the view.
  44.  
  45.    Xoobr views are meant to complement the textual browser interface.
  46. Therefore, the two most common actions used in the text browser are
  47. performed in a similar manner within an xoobr view.  A click on a node
  48. with the left mouse button highlights the node and then displays the
  49. appropriate class text in the chosen editor, ready for editing.  A
  50. click of the middle button performs similarly but displays the
  51. associated class for viewing only.
  52.  
  53.    [The right mouse button is disable in this release of the X
  54. OO-Browser because of an inability to debug a problem in limiting its
  55. use to tree nodes.]  The right mouse button when depressed over a node
  56. displays a short menu of commands that may be applied to the node.  The
  57. only ones of real interest at this point are the collapse and expand
  58. entries which let you hide and then restore the display of a node's
  59. subtree.  This allows you precise control over the amount of detail you
  60. receive in various parts of the hierarchy.
  61.  
  62.    The Help button in the upper right of the an xoobr session window
  63. when selected displays a few pages of help text regarding the program
  64. itself.
  65.  
  66.    The {`M-k'} `(br-tree-kill)' command will prompt to see if you want
  67. to terminate all xoobr sessions started from within the current editor
  68. session.  If you answer affirmatively, all such processes disappear, as
  69. your screen will quickly indicate.
  70.  
  71.    The upper left of a session window contains a set of buttons which
  72. display menus.  The only menu entry you need be concerned with at all is
  73. found under the file menu, labelled "Quit".  xoobr processes may also be
  74. terminated by issuing the kill command mentioned just before.  A third
  75. menas of killing such processes is by sending the permanent `(br-quit)'
  76. command, {`C-u q'}, to the textual browser.  You will then be prompted
  77. as to whether you want to terminate all xoobr sessions started from
  78. within the current editor session.
  79.  
  80. 
  81. File: oo-browser.info,  Node: Options,  Next: Customization,  Prev: Usage,  Up: Top
  82.  
  83. OO-Browser Options
  84. ******************
  85.  
  86. * Menu:
  87.  
  88. * External Viewing::            Using An External Viewer or Editor
  89. * Keep Viewed Classes::
  90. * Inhibit Version::             Inhibit Version Screen
  91. * Invert Ancestors::            Invert Ancestor Trees
  92. * Save All::                    Save All Lookup Tables
  93. * Use Children::                Build Children Lookup Table
  94. * Sort Options::                Controlling Class Listing Order
  95.  
  96. 
  97. File: oo-browser.info,  Node: External Viewing,  Next: Keep Viewed Classes,  Prev: Options,  Up: Options
  98.  
  99. Using an External Viewer or Editor
  100. ==================================
  101.  
  102.    The OO-Browser allows you to select your desired editor and viewer
  103. programs when you use a multi-windowed display.  By default, both of
  104. these tasks are handled by Emacs so that the browser works on text
  105. terminals.  If you choose an external editor or viewer, Emacs will still
  106. automatically be used whenever you invoke the browser from a text
  107. terminal.
  108.  
  109.    If you wish to edit classes displayed by the browser in an editor
  110. other than Emacs, set the BR-EDITOR-CMD variable to the command with
  111. which you wish to edit.  Arguments to the command should be placed in
  112. the variables named BR-ED[1-9], with one string argument per variable.
  113. Unused variables should have the value `nil'.  Bear in mind that the
  114. command must generate a new window under your window system.  For
  115. example, the vi editor under UNIX does not create its own window, it
  116. runs within the window in which it is created.  Under X one would
  117. create a new xterm window and then invoke vi.  The command line would
  118. be *xterm -e vi*, the settings in your personal initialization file
  119. would then be:
  120.  
  121.             `
  122.      (setq br-editor-cmd "xterm" br-ed1 "-e" br-ed2 "vi"
  123.            br-ed3 nil br-ed4 nil br-ed5 nil
  124.            br-ed6 nil br-ed7 nil br-ed8 nil br-ed9 nil)'
  125.  
  126.    This editor will only be used when the browser is run under a window
  127. system external to Emacs, like X.  (In such a case, the Emacs variable
  128. WINDOW-SYSTEM will be non-nil).
  129.  
  130.    If you want to view classes in a read-only fashion outside of Emacs,
  131. set the following BR-VIEWER-CMD and BR-VW[1-9] variables in a similar
  132. manner as you did for the editor variables above.
  133.  
  134.    For example, to use `xmore', an X-compatible version of `more', as
  135. your viewer, use the following settings (assuming all the BR-VW
  136. variables are already null):
  137.  
  138.             `(setq br-viewer-cmd "xmore")'
  139.  
  140. 
  141. File: oo-browser.info,  Node: Keep Viewed Classes,  Next: Inhibit Version,  Prev: External Viewing,  Up: Options
  142.  
  143. Keep Viewed Classes
  144. ===================
  145.  
  146.    The BR-KEEP-VIEWED-CLASSES flag is turned off by default, indicating
  147. that each time a class is viewed immediately after another one, the
  148. prior one is deleted.  If it is set to any non-nil value, all viewed
  149. classes are left around for selection.
  150.  
  151.    In typical use, the burden of having to manage all viewed classes is
  152. greater than the benefit of leaving them in memory.  This is why the
  153. flag is off by default.  The class buffer menu can be used to delete
  154. buffers when you want to trim down the number with which you are
  155. dealing.  *Note Using the Mouse::, for details on this technique.
  156.  
  157.    The value of the BR-KEEP-VIEWED-CLASSES flag may be easily toggled
  158. with the `(br-toggle-keep-viewed)' command bound to {`V'}.
  159.  
  160. 
  161. File: oo-browser.info,  Node: Inhibit Version,  Next: Invert Ancestors,  Prev: Keep Viewed Classes,  Up: Options
  162.  
  163. Inhibit Version Screen
  164. ======================
  165.  
  166.    After you are familiar with the opening OO-Browser version screen,
  167. you may want to disable its display each time the browser is started.
  168. This is done by setting BR-INHIBIT-VERSION non-nil, as in the following
  169. line that would go in your personal OO-Browser initialization file:
  170.  
  171.          `(setq br-inhibit-version t)'
  172.  
  173. This option has no effect on the display of the help screen which
  174. follows the version screen.  Even with this option set, you may display
  175. the version screen at any time from within a browser listing window by
  176. using {`C-c #'} `(br-version)'.
  177.  
  178. 
  179. File: oo-browser.info,  Node: Invert Ancestors,  Next: Save All,  Prev: Inhibit Version,  Up: Options
  180.  
  181. Invert Ancestor Trees
  182. =====================
  183.  
  184.    *Note Browsing Descendants and Ancestors: Descendants and Ancestors,
  185. for more information.
  186.  
  187.    This is a global OO-Browser option, it affects all Environments.
  188.  
  189.    Ancestor trees are normally shown to emphasize how the trees branch
  190. out from their origin.  An initialization file line such as:
  191.  
  192.          `(setq br-invert-ancestors t)'
  193.  
  194. will cause the display of ancestor trees to be inverted such that the
  195. further ancestors appear as roots of the trees and parents (the nearest
  196. ancestors) appear as leaves in the trees.  This ensures that all
  197. listing displays reflect the class inheritance structure with children
  198. below parents.
  199.  
  200. 
  201. File: oo-browser.info,  Node: Save All,  Next: Use Children,  Prev: Invert Ancestors,  Up: Options
  202.  
  203. Save All Lookup Tables
  204. ======================
  205.  
  206.    This is an Environment-specific option set during Environment
  207. specification.  *Note Creating Environments::.
  208.  
  209.    Half of the browser lookup tables can be built whenever an
  210. Environment is loaded.  If this option is set, these tables will be
  211. stored in the Environment file instead.  This will speed Environment
  212. loading somewhat, at the cost of doubling the file size per saved
  213. Environment.
  214.  
  215. 
  216. File: oo-browser.info,  Node: Use Children,  Next: Sort Options,  Prev: Save All,  Up: Options
  217.  
  218. Build Children Lookup Table
  219. ===========================
  220.  
  221.    This is an Environment-specific option set during Environment
  222. specification.  *Note Creating Environments::.
  223.  
  224.    This is a highly recommended option that allows for fast descendant
  225. lookups.  The only time one would turn off this option would be when a
  226. file system is extremely short of space.
  227.  
  228. 
  229. File: oo-browser.info,  Node: Sort Options,  Prev: Use Children,  Up: Options
  230.  
  231. Controlling Class Listing Order
  232. ===============================
  233.  
  234.    The OO-Browser normally orders classes and elements in listing
  235. windows according to the ASCII character set.  This sort order is
  236. controlled by the BR-SORT-OPTIONS variable which specifies the command
  237. line options sent to the system `sort' command.  (Under any Emacs 19
  238. variant, this variable is not used by the `br-order' command, bound to
  239. {`o'}.)
  240.  
  241.    The value of this variable should be a single string of options such
  242. as `-fu' (the default) or `nil' for no options.  The `-f' option folds
  243. upper and lower case to the same character for sort comparisons.  The
  244. `-u' option leaves only unique elements in the listing by eliminating
  245. any duplicate entries.
  246.  
  247. 
  248. File: oo-browser.info,  Node: Customization,  Next: Standalone,  Prev: Options,  Up: Top
  249.  
  250. Personal Customization
  251. **********************
  252.  
  253.    The following hook variables are provided so that one may customize
  254. what happens each time the OO-Browser is invoked.  Set them as you
  255. would any other Emacs Lisp hook variables in a personal OO-Browser
  256. initialization file, `~/.br-init.el'.  They all default to null
  257. operations.
  258.  
  259.    If you want a set of actions to occur each time after the OO-Browser
  260. is invoked, attach them to BR-MODE-HOOK.  For language-specific
  261. actions, a language-specific hook such as BR-EIF-MODE-HOOK, or
  262. BR-C++-MODE-HOOK is run after BR-MODE-HOOK.
  263.  
  264.    If you want a set of actions to occur after each time that a new
  265. browser listing buffer is created, set BR-CLASS-LIST-HOOK.
  266.  
  267. 
  268. File: oo-browser.info,  Node: Standalone,  Next: Languages,  Prev: Customization,  Up: Top
  269.  
  270. Using Standalone OO-Browser Features
  271. ************************************
  272.  
  273.    A number of browser features may be used independently of the browser
  274. user interface, assuming that a site-wide or personal OO-Browser
  275. initialization file has been loaded into your current Emacs session.
  276.  
  277.    First, an Environment must be selected and loaded into the OO-Browser
  278. via {`C-c C-o'}.  When the browser user interface is displayed, use
  279. {`q'} to quit.
  280.  
  281.    Alternatively, you can load an Environment without invoking the
  282. browser user interface by using {`M-x br-env-load RET'}.  The
  283. standalone browser features will use the newly loaded Environment.
  284.  
  285. The commands that are available for standalone use include:
  286. `br-add-class-file'
  287.      Add a file of classes to the current Environment.  *Note Adding
  288.      and Deleting Classes::.
  289.  
  290. `br-find'
  291.      Interactively complete class or ELEMENT name and jump to its
  292.      definition.
  293.  
  294. `br-find-class'
  295.      Display file of class text matching CLASS-NAME in VIEW-ONLY mode
  296.      if non-nil.
  297.  
  298. `br-complete-type'
  299.      Perform in-buffer completion of a type or element identifier
  300.      before point.
  301.  
  302. `br-class-path'
  303.      Return full path, if any, to CLASS-NAME.  With optional prefix
  304.      argument INSERT non-nil, insert path at point.
  305.  
  306.    All of these commands provide full completion.  *Note Completing
  307. Names::, based upon the current OO-Browser Environment.
  308.  
  309.    When editing and debugging code, one often wants to look at a class
  310. or element definition without having to invoke the browser to locate it.
  311. The `(br-find)' command does exactly that by prompting for a name and
  312. then displaying for editing the class or element definition given by
  313. that name.
  314.  
  315.    The `(br-find-class)' command is similar. It prompts for a class name
  316. and then displays its source file in a viewable, read-only mode.  To
  317. display a class file in an editable mode, send a prefix argument to this
  318. command.
  319.  
  320.    When writing code and entering class attribute definitions (variable
  321. definitions), one often has to repetitively enter class names as the
  322. static types for the attributes.  The `(br-complete-type)' command
  323. completes and inserts a class name at point in the current buffer.  The
  324. traditional key to bind such a command to is {`M-TAB'}.  The following
  325. example illustrates its usage.
  326.          my_list: LIN<-- (point is here)
  327.      
  328.      {`M-TAB'} is hit:
  329.      
  330.          my_list: LINKED_LIST
  331.  
  332.    The `(br-class-path)' command prompts for a class name and displays
  333. the full path of the associated class source file in the minibuffer.
  334. With a prefix argument, it inserts the path name at point in the
  335. current buffer.
  336.  
  337.    The following key bindings are recommended when using these
  338. standalone features:
  339.  
  340.        `(define-key eiffel-mode-map    "\C-c\C-f" 'br-find)'
  341.        `(define-key c++-mode-map       "\C-c\C-f" 'br-find)'
  342.        `(define-key lisp-mode-map      "\C-c\C-f" 'br-find)'
  343.        `(define-key objc-mode-map      "\C-c\C-f" 'br-find)'
  344.        `(define-key smalltalk-mode-map "\C-c\C-f" 'br-find)'
  345.      
  346.        ;; {`C-M-i'} means {`M-TAB'}.
  347.        `(define-key eiffel-mode-map    "\C-\M-i" 'br-complete-type)'
  348.        `(define-key c++-mode-map       "\C-\M-i" 'br-complete-type)'
  349.        `(define-key lisp-mode-map      "\C-\M-i" 'br-complete-type)'
  350.        `(define-key objc-mode-map      "\C-\M-i" 'br-complete-type)'
  351.        `(define-key smalltalk-mode-map "\C-\M-i" 'br-complete-type)'
  352.      
  353.        `(define-key eiffel-mode-map    "\C-c\C-w" 'br-class-path)'
  354.        `(define-key c++-mode-map       "\C-c\C-w" 'br-class-path)'
  355.        `(define-key lisp-mode-map      "\C-c\C-w" 'br-class-path)'
  356.        `(define-key objc-mode-map      "\C-c\C-w" 'br-class-path)'
  357.        `(define-key smalltalk-mode-map "\C-c\C-w" 'br-class-path)'.
  358.  
  359.    *Note Eiffel Specifics::, for an Eiffel-specific standalone browser
  360. feature.
  361.  
  362. 
  363. File: oo-browser.info,  Node: Languages,  Next: Features,  Prev: Standalone,  Up: Top
  364.  
  365. Language-Specific Notes
  366. ***********************
  367.  
  368. * Menu:
  369.  
  370. * C Specifics::
  371. * C++ Specifics::
  372. * CLOS Specifics::
  373. * Eiffel Specifics::
  374. * Java Specifics::
  375. * Objective-C Specifics::
  376.  
  377. 
  378. File: oo-browser.info,  Node: C Specifics,  Next: C++ Specifics,  Prev: Languages,  Up: Languages
  379.  
  380. C Specifics
  381. ===========
  382.  
  383.    The BR-C-TAGS-FLAG variable controls whether or not C constructs are
  384. included within C and C-based language Environments.  By default, this
  385. flag is true.  Use `M-x br-toggle-c-tags RET' to toggle its value.  If
  386. you set it false before building an Environment, then C constructs will
  387. not be included in the Environment.  (Note that C functions are always
  388. included in C++ Environments, regardless of this flag value.)
  389.  
  390.    If you wish to build an Environment whose source code is entirely C,
  391. ensure that the BR-C-TAGS-FLAG is enabled and then select C++ when
  392. asked for the language to browse.  In the future, a language setting for
  393. C will probably be added.
  394.  
  395.    C constructs are grouped into default classes for browsing.  The
  396. elements of each default class are the instances of the associated
  397. construct within the Environment.  Use normal element/feature commands
  398. to browse each instance.
  399.  
  400.               DEFAULT CLASS    C CONSTRUCT
  401.               --------------------------------------
  402.               [constant]       #define constant
  403.               [enumeration]    enum {}
  404.               [function]       non-member function()
  405.               [macro]          #define macro()
  406.               [structure]      struct {}
  407.               [type]           typedef {}
  408.               [union]          union {}
  409.  
  410. 
  411. File: oo-browser.info,  Node: C++ Specifics,  Next: CLOS Specifics,  Prev: C Specifics,  Up: Languages
  412.  
  413. C++ Specifics
  414. =============
  415.  
  416.    *Note C Specifics::, for details on C-specific support within C++
  417. Environments.
  418.  
  419. * Menu:
  420.  
  421. * C++ Element Selection::       Source Code Element Selection
  422. * C++ Settings::
  423.  
  424. 
  425. File: oo-browser.info,  Node: C++ Element Selection,  Next: C++ Settings,  Prev: C++ Specifics,  Up: C++ Specifics
  426.  
  427. Source Code Element Selection
  428. -----------------------------
  429.  
  430.    C++ pure virtual function declarations, which specify method
  431. interfaces but no implementation, appear in class feature listings.
  432. The function name is preceded by the `"> "' string to identify the
  433. function as a pure virtual (deferred) function.  Pure virtuals may be
  434. treated like any other member functions within the browser.  Since
  435. there is no definition for such a function within the class in which it
  436. is listed, its declaration will be shown instead, when requested.
  437.  
  438.    Friend functions and friend classes give members of another class
  439. access to the private parts of the current class.  They appear in class
  440. feature listings preceded by the `"% "' string.  The keys, {`v'} or
  441. {`e'}, display the friend declaration within the current class.  Use
  442. {`V'}, `(br-view-friend)' to view the definition of the friend class or
  443. function.
  444.  
  445.    Methods and operators associated with creating and destroying objects
  446. are preceded by the `"+ "' string in listing buffers.  All other method
  447. listing entries are preceded by the `"- "' string.
  448.  
  449.    One can jump from a C++ declaration to its definition by clicking the
  450. Action Key when within the declaration.  Most importantly, once a class
  451. header file is displayed, simply click on a method declaration to see
  452. its corresponding definition.  Each feature declaration should be
  453. terminated with a semicolon to ensure accurate scanning.  If the method
  454. is inherited from another class, a message at the bottom of the frame
  455. will describe which class the method is defined in once the browser
  456. displays the method definition.
  457.  
  458.    Parent classes may be browsed in a similar manner by clicking on
  459. their names in an inheritance or declaration clause.  It is therefore
  460. important to click on the method name part of a declaration when that is
  461. the element desired.
  462.  
  463.    Include files may be browsed by selecting their inclusion
  464. declarations (#include ...) within a source file.  Include files
  465. delimited by double quotes are searched for in the following places:
  466. first, the directory of the current source file, then the directories
  467. listed in the variable C++-INCLUDE-DIRS, and then in any directories
  468. included in the current environment.
  469.  
  470.    Include files delimited by angle brackets are searched for in the
  471. following places:  first, the directories listed in the variable
  472. C++-INCLUDE-DIRS, then the directories listed in the variable
  473. C++-CPP-INCLUDE-DIRS, and then in any directories included in the
  474. current environment.  The variable C++-CPP-INCLUDE-DIRS should hold a
  475. list of the standard directories searched by your C++ pre-processor.
  476. Each directory entry must end with a directory separator.  On UNIX
  477. systems, this is the '/' character.
  478.  
  479. 
  480. File: oo-browser.info,  Node: C++ Settings,  Prev: C++ Element Selection,  Up: C++ Specifics
  481.  
  482. C++ Settings
  483. ------------
  484.  
  485.    By default, `class', `struct' and `union' definitions all constitute
  486. class definitions to the C++ OO-Browser.  If you prefer some other
  487. criteria, you will need to modify the definition of C++-CLASS-KEYWORD
  488. in `br-c++.el'.
  489.  
  490.    If you find that the browser is not scanning some of your C++ source
  491. files, you may be using file suffixes which it does not recognize.
  492. Examine the value of C++-SRC-FILE-REGEXP and add any special file
  493. suffixes you use to it.
  494.  
  495. 
  496. File: oo-browser.info,  Node: CLOS Specifics,  Next: Eiffel Specifics,  Prev: C++ Specifics,  Up: Languages
  497.  
  498. CLOS Specifics
  499. ==============
  500.  
  501. * Menu:
  502.  
  503. * CLOS Method Handling::        Method Handling
  504. * CLOS Settings::
  505.  
  506. 
  507. File: oo-browser.info,  Node: CLOS Method Handling,  Next: CLOS Settings,  Prev: CLOS Specifics,  Up: CLOS Specifics
  508.  
  509. Method Handling
  510. ---------------
  511.  
  512.    In CLOS, methods may have typed parameters of the form,
  513. `(<parameter-name> <class>)'; these are called "specialized
  514. parameters".  Each such parameter defines the method within `<class>'.
  515. Thus, a single method definition can generate methods associated with
  516. many classes.  The OO-Browser lets you navigate to a method definition
  517. from any of the classes for which it is defined, since a method is
  518. included as an element of each of its constituent classes.
  519.  
  520.    CLOS permits compile-time computation of the `<class>' of a
  521. specialized parameter, through use of the expression, `(eql <form>)'.
  522. Since the OO-Browser cannot perform this computation, it treats such a
  523. parameter as non-specialized.
  524.  
  525.    Methods may also contain non-specialized parameters of the form,
  526. `<parameter-name>'.  The type of each such parameter defaults to the
  527. default root class `t' in CLOS.  But a method is only included in the
  528. class `t' by the OO-Browser if none of its parameters are specialized.
  529. Otherwise, methods with more specific types which happened to include
  530. one or more non-specialized parameters would appear to not have a more
  531. specific type than `t'.
  532.  
  533. 
  534. File: oo-browser.info,  Node: CLOS Settings,  Prev: CLOS Method Handling,  Up: CLOS Specifics
  535.  
  536. CLOS Settings
  537. -------------
  538.  
  539.    The OO-Browser automatically works with CLOS class and method
  540. definitions.  But Lisp contains many other standard object types such as
  541. functions, macros and variables which you may wish to browse.  These are
  542. handled through a configuration variable as explained below.
  543.  
  544.    The CLOS-ELEMENT-TYPE-ALIST variable determines the Lisp definition
  545. constructs that the browser looks for and the associated default class
  546. under which instances of each construct type are grouped.  Each element
  547. in the association list is a cons cell whose first part is the function
  548. name string that defines an instance of a particular type, e.g.
  549. `"defun"'.
  550.  
  551.    The second part is a default class name, a string, under which to
  552. assign each instance of the type, e.g. `"function"'.  The OO-Browser
  553. always displays default class names with square brackets around them,
  554. e.g. `[function]', to distinguish them from classes defined within the
  555. Environment.
  556.  
  557. Here is the default CLOS-ELEMENT-TYPE-ALIST setting:
  558.  
  559.        '(("defconstant"  . "constant")
  560.          ("defconst"     . "constant")
  561.          ("defun"        . "function")
  562.          ("defgeneric"   . "generic")
  563.          ("defmacro"     . "macro")
  564.          ("defpackage"   . "package")
  565.          ("defparameter" . "parameter")
  566.          ("defsetf"      . "setfunction")
  567.          ("defstruct"    . "structure")
  568.          ("deftype"      . "type")
  569.          ("defvar"       . "variable")
  570.          ("fset"         . "function"))
  571.  
  572.    The CLOS-DEF-FORM-WITH-ARGS-REGEXP is a regular expression which
  573. includes a subset of the definition symbol names from
  574. CLOS-ELEMENT-TYPE-ALIST, namely those which require an argument list to
  575. uniquely distinguish them from other elements, e.g. functions.
  576.  
  577. 
  578. File: oo-browser.info,  Node: Eiffel Specifics,  Next: Java Specifics,  Prev: CLOS Specifics,  Up: Languages
  579.  
  580. Eiffel Specifics
  581. ================
  582.  
  583.    Eiffel support has now been updated to Eiffel version 3, to the best
  584. of our knowledge.  If you find any problems, please report them to
  585. <oo-browser@hub.ucsb.edu> (this is a public mailing list).
  586.  
  587. * Menu:
  588.  
  589. * Eiffel Listings::
  590. * Eiffel Element Selection::    Source Code Element Selection
  591. * Eiffel Settings::
  592.  
  593. 
  594. File: oo-browser.info,  Node: Eiffel Listings,  Next: Eiffel Element Selection,  Prev: Eiffel Specifics,  Up: Eiffel Specifics
  595.  
  596. Eiffel Listings
  597. ---------------
  598.  
  599.    Eiffel entities are categorized when shown within OO-Browser listing
  600. buffers.  Classes are shown by name, without any prefix.  Features are
  601. shown by name but are preceded by a special character that indicates
  602. the kind of feature.  The following table describes each prefix.
  603.  
  604. `-'
  605.      precedes regular routines;
  606.  
  607. `='
  608.      precedes attributes;
  609.  
  610. `1'
  611.      precedes once routines, which create shared objects;
  612.  
  613. `>'
  614.      precedes deferred features, which are specified but not defined
  615.      within this class;
  616.  
  617. `/'
  618.      precedes external features, which are defined in a non-Eiffel
  619.      language.
  620.  
  621. 
  622. File: oo-browser.info,  Node: Eiffel Element Selection,  Next: Eiffel Settings,  Prev: Eiffel Listings,  Up: Eiffel Specifics
  623.  
  624. Source Code Element Selection
  625. -----------------------------
  626.  
  627.    One can jump from an Eiffel element reference to its definition by
  628. clicking the Action Key when within the reference.  Selection of a
  629. feature name in an export clause displays the feature definition, even
  630. if it is renamed several times within ancestors.  Parent classes may be
  631. browsed in a similar manner by clicking on their names in an inheritance
  632. or declaration clause.
  633.  
  634.    The following example of locating a renamed feature is taken from an
  635. actual set of Eiffel library classes:
  636.  
  637.      User selects feature `subwindow' of `POPUP_MENU'
  638.         inherited from `WINDOW' which renames `child' as `subwindow'
  639.            inherited from `TWO_WAY_TREE' which renames `active' as `child'
  640.               inherited from `TWO_WAY_LIST'
  641.                  inherited from `LINKED_LIST' which defines `active'.
  642.  
  643.    The browser would display the feature `active' and explain to the
  644. user that feature `subwindow' of class `POPUP_MENU' is inherited from
  645. feature `active' of class `LINKED_LIST'.  Location of this sort of
  646. feature definition would be incredibly tedious without programmatic
  647. support.
  648.  
  649.    The algorithm used to locate features is dynamic, so if another class
  650. were inserted into the inheritance structure given above, the feature
  651. definition would still be located properly.
  652.  
  653. 
  654. File: oo-browser.info,  Node: Eiffel Settings,  Prev: Eiffel Element Selection,  Up: Eiffel Specifics
  655.  
  656. Eiffel Settings
  657. ---------------
  658.  
  659.    Be sure that the 'inherit' and 'feature' clauses in your classes
  660. begin in column 0; otherwise the browser parser will not work properly.
  661. If you prefer some other indentation style, you will need to slightly
  662. alter `(eif-get-parents-from-source)' in `br-eif.el'; specifically, the
  663. lines that contain '^inherit' and '^feature'.
  664.  
  665.    Emacs has a feature called error parsing which lets one quickly jump
  666. to the line of code that supposedly triggered an error.  (*Note
  667. Compilation Errors: (emacs)Compilation, for information on error
  668. parsing.)  Some object-oriented language compilers display the name of
  669. the class and line number with each error message but do not include
  670. the filename containing the class source code.  Emacs then has no way
  671. of parsing the error message.  The browser class location facilities
  672. enable one to perform error parsing across any set of classes in a
  673. single Environment, given only this type of message.  Interactive
  674. Software Engineering's Eiffel compiler is an example of a compiler that
  675. produces this type of error.  The code for parsing these Eiffel error
  676. messages is included in `eif-ise-err.el'.
  677.  
  678. 
  679. File: oo-browser.info,  Node: Java Specifics,  Next: Objective-C Specifics,  Prev: Eiffel Specifics,  Up: Languages
  680.  
  681. Java Specifics
  682. ==============
  683.  
  684.    Java abstract method declarations, which specify method interfaces
  685. but no implementation, appear in class feature listings.  The method
  686. name is preceded by the `"> "' string to identify the method as an
  687. abstract (deferred) method.  Abstract methods may be treated like any
  688. other methods within the browser.  Since there is no definition for
  689. such a method within the class in which it is listed, its declaration
  690. will be shown instead, when requested.
  691.  
  692.    Native methods are like abstract methods in that only their
  693. interfaces are specified in Java.  Unlike abstract methods, their
  694. method bodies are defined in external languages such as C to allow for
  695. machine-specific dependencies.  Native methods are listed in the
  696. browser prefixed by the `"/ "' string, indicating that they are divided
  697. between Java and another language.
  698.  
  699.    Methods associated with creating and destroying objects are preceded
  700. by the `"+ "' string in listing buffers.  All other method listing
  701. entries are preceded by the `"- "' string.
  702.  
  703.    Java interface specifications, which specify protocols to which
  704. classes must conform, are treated just like class definitions in browser
  705. listings. All the methods of such interfaces are abstract, however.
  706.  
  707. 
  708. File: oo-browser.info,  Node: Objective-C Specifics,  Prev: Java Specifics,  Up: Languages
  709.  
  710. Objective-C Specifics
  711. =====================
  712.  
  713.    *Note C Specifics::, for details on C-specific support within
  714. Objective-C Environments.
  715.  
  716.    The OO-Browser supports browsing Objective-C classes, methods,
  717. categories and formal protocols.  Earlier sections of this manual
  718. explain how to browse these entities.  This section documents
  719. Objective-C language specifics, including variable settings.
  720.  
  721.    Objective-C entities are categorized when shown within OO-Browser
  722. listing buffers.  Classes are shown by name, without any prefix.
  723. Methods are shown by name but are preceded by a special character that
  724. indicates the kind of method.  The following table describes each
  725. prefix.
  726.  
  727. `-'
  728.      precedes instance methods;
  729.  
  730. `+'
  731.      precedes class (factory) methods that affect the factory object
  732.      for the class.
  733.  
  734. * Menu:
  735.  
  736. * Objective-C Categories::
  737. * Objective-C Protocols::
  738. * Objective-C Element Selection::  Source Code Element Selection
  739. * Objective-C Settings::
  740.  
  741. 
  742. File: oo-browser.info,  Node: Objective-C Categories,  Next: Objective-C Protocols,  Prev: Objective-C Specifics,  Up: Objective-C Specifics
  743.  
  744. Objective-C Categories
  745. ----------------------
  746.  
  747.    An "Objective-C category" is an internal class grouping that
  748. specifies and implements a set of related class features.  The
  749. aggregation of all of the categories defined by a class and its
  750. ancestors represents the complete class definition.
  751.  
  752.    The OO-Browser can list and browse the source for: the categories of
  753. a class, all class categories in an Environment, and the classes which
  754. implement a category.  *Note Browsing Categories::, for details.
  755.  
  756. 
  757. File: oo-browser.info,  Node: Objective-C Protocols,  Next: Objective-C Element Selection,  Prev: Objective-C Categories,  Up: Objective-C Specifics
  758.  
  759. Objective-C Protocols
  760. ---------------------
  761.  
  762.    An "Objective-C protocol" is an interface specification to which a
  763. class may conform.  The protocol includes a set of method signatures
  764. which any conforming class must implement.  One protocol may inherit
  765. from a list of other protocols, and thus expand the set of methods which
  766. a conforming class must implement.  The OO-Browser can list and browse
  767. the source for: the protocols to which a class conforms, all protocols
  768. in an Environment, and the implementors of a protocol.  *Note Browsing
  769. Protocols::, for details.
  770.  
  771. 
  772. File: oo-browser.info,  Node: Objective-C Element Selection,  Next: Objective-C Settings,  Prev: Objective-C Protocols,  Up: Objective-C Specifics
  773.  
  774. Source Code Element Selection
  775. -----------------------------
  776.  
  777.    One can jump from an Objective-C declaration to its definition by
  778. clicking the Action Key when within the declaration.  Most importantly,
  779. once a class header file is displayed, simply click on a method
  780. declaration to see its corresponding definition.  If the method is
  781. inherited from another class, a message at the bottom of the frame will
  782. describe which class the method is defined in once the browser displays
  783. the method definition.
  784.  
  785.    Parent classes may be browsed in a similar manner by clicking on
  786. their names in an inheritance or declaration clause.  It is therefore
  787. important to click on the method name part of a declaration when that is
  788. the element desired.
  789.  
  790.    Include files may be browsed by selecting their inclusion
  791. declarations (#import ...) within a source file.  Include files
  792. delimited by double quotes are searched for in the following places:
  793. first, the directory of the current source file, then the directories
  794. listed in the variable OBJC-INCLUDE-DIRS, and then in any directories
  795. included in the current environment.
  796.  
  797.    Include files delimited by angle brackets are searched for in the
  798. following places:  first, the directories listed in the variable
  799. OBJC-INCLUDE-DIRS, then the directories listed in the variable
  800. OBJC-CPP-INCLUDE-DIRS, and then in any directories included in the
  801. current environment.  The variable OBJC-CPP-INCLUDE-DIRS should hold a
  802. list of the standard directories searched by your Objective-C
  803. pre-processor.  Each directory entry must end with a directory
  804. separator.  On UNIX systems, this is the '/' character.
  805.  
  806. 
  807. File: oo-browser.info,  Node: Objective-C Settings,  Prev: Objective-C Element Selection,  Up: Objective-C Specifics
  808.  
  809. Objective-C Settings
  810. --------------------
  811.  
  812.    By default, the `@interface' keyword indicates a class definition to
  813. the Objective-C OO-Browser.  If you prefer some other criteria, you
  814. will need to modify the definition of OBJC-CLASS-KEYWORD in
  815. `br-objc.el'.
  816.  
  817.    If you find that the browser is not scanning some of your Objective-C
  818. source files, you may be using file suffixes which it does not
  819. recognize.  Examine the value of OBJC-SRC-FILE-REGEXP and add any
  820. special file suffixes you use to it.
  821.  
  822. 
  823. File: oo-browser.info,  Node: Features,  Next: Commands,  Prev: Languages,  Up: Top
  824.  
  825. OO-Browser Features
  826. *******************
  827.  
  828.    * Support for Eiffel, C++, Objective-C, Smalltalk, Java and Common
  829.      Lisp and its Object System (CLOS) is included.  Additionally,
  830.      support for browsing large amounts of material in Info format by
  831.      node name (a popular online documentation format with cross
  832.      references and hierarchical structure) is include.  All languages
  833.      provide class browsing via either a textual or a graphical
  834.      interface.
  835.  
  836.    * Method browsing is supported for C++, Objective-C, Eiffel and CLOS.
  837.      CLOS supports browsing all elements defined with (def* constructs.
  838.      In-source feature browsing is also supported for all of these
  839.      languages.  One simply selects a feature name to jump to its
  840.      corresponding source.  Method name overloading in C++ and
  841.      inherited feature renaming in Eiffel are fully supported.
  842.  
  843.    * C code browsing is supported for C++, Objective-C and C source
  844.      code.
  845.  
  846.    * Objective-C category and formal protocol browsing are supported.
  847.  
  848.    * C++ parameterized template classes and methods are supported.
  849.  
  850.    * Building Environments is fast compared to many other tools and
  851.      browser startup once an Environment has been built is very fast.
  852.      Response times on workstations are excellent; for example, in one
  853.      test case, less than two real seconds were required to display a
  854.      set of complex inheritance graphs involving over 400 classes.
  855.  
  856.    * Class inheritance networks may be displayed.  Either a single
  857.      inheritance level (parents or children) or the entire inheritance
  858.      network (ancestors or descendants) for a set of classes may be
  859.      shown.
  860.  
  861.    * Multiple inheritance support is built-in, where applicable.
  862.  
  863.    * The user need not know the location of class source; the browser
  864.      will display or edit a class source based solely upon its class
  865.      name.
  866.  
  867.    * Immediate switching among languages is allowed.  One can switch
  868.      from Eiffel browsing to C++ browsing in an instant, if so desired.
  869.      Or simply run two browsers side by side.
  870.  
  871.    * Class files may be added, replaced or deleted one at a time or as a
  872.      group by specifying a root directory below which all class files
  873.      are found, including those in subdirectories.
  874.  
  875.    * The browser uses class source code only, hence no compiler is
  876.      necessary for proper browser operation.
  877.  
  878.    * Library (stable) and System (in development) classes may be
  879.      maintained and listed separately or together.  Any number of
  880.      Libraries and Systems may be combined for listing in a single
  881.      Environment.  There are no fixed limits on the number of classes
  882.      per Environment nor on the number of Environments that may be
  883.      browsed.
  884.  
  885.    * The number of listing windows is limited only by the frame width
  886.      and the width setting used for listing windows.
  887.  
  888.    * Statistics on classes and Environments may be displayed.
  889.  
  890.    * Language-specific class information may be shown.  Presently this
  891.      feature is supported only for Eiffel.  A listing of class parents,
  892.      attributes, routines and best guess (highly accurate) list of
  893.      routine calls may be displayed.  Outputs from the Eiffel 'short'
  894.      and 'flat' commands may also be shown.
  895.  
  896.    * Machine-independent mouse support is included along with an
  897.      extremely intuitive point and click interface.  The OO-Browser is
  898.      pre-configured for use with the X window system, NEXTSTEP, Sunview
  899.      or Apollo's DM window system under InfoDock, Emacs V19, XEmacs,
  900.      Epoch, and Emacs V18.
  901.  
  902.    * Popup and pulldown command menus are available under InfoDock,
  903.      Emacs V19 and XEmacs.
  904.  
  905.    * All browser outputs are text which may be edited as desired or
  906.      saved to files.
  907.  
  908.    * A single key provides ASCII ordering of class names, ascending or
  909.      descending, including those from inheritance trees.  Classes may be
  910.      easily located by matching a regular expression or string to the
  911.      set of class names in an Environment, with repeated searches
  912.      incrementally narrowing the selected set.
  913.  
  914.    * Browser functions may be used standalone within the editor without
  915.      using the multi-windowed browser interface.  One useful example is
  916.      to point to a class name such as a parent class in the text of
  917.      another class and have the parent's source appear in an editable
  918.      fashion.  An alternative editor and viewer may be selected to
  919.      adapt the browser to personal taste.
  920.  
  921.    * The browser is adaptable to any class-based object-oriented
  922.      language.  It works best with languages that focus on static class
  923.      creation such as Eiffel and C++.  Those that use dynamic (runtime)
  924.      class creation such as CLOS must be interfaced to the browser so
  925.      that classes created at runtime are added to the browser's
  926.      Environment.
  927.  
  928.    * The OO-Browser is integrated with the powerful GNU Emacs editor;
  929.      it works on any UNIX system display supported by Emacs.  Most
  930.      browser commands may be executed by direct selection, providing a
  931.      very natural interface.
  932.  
  933.    * All source code, over 400 kilobytes, is included and is heavily
  934.      documented.
  935.  
  936. 
  937. File: oo-browser.info,  Node: Commands,  Next: Glossary,  Prev: Features,  Up: Top
  938.  
  939. OO-Browser Command Descriptions
  940. *******************************
  941.  
  942.    The following documentation is meant for programmers who want to
  943. modify the OO-Browser but is included here since some users of the
  944. OO-Browser may find it useful.  All commands that are bound to keys and
  945. that are specific to the OO-Browser are listed here.  Within each
  946. command description, identifiers shown in all capitals are the names of
  947. the command's formal arguments; all formal arguments are presented in
  948. the order in which they are required by the command.  If a command takes
  949. optional arguments, the first optional argument is labeled *optional*;
  950. all following arguments are assumed to be optional.
  951.  
  952. `br-add-class-file  {`C-c ^'}'
  953.      Adds a file of classes to the current Environment.  Interactively
  954.      or when optional CLASS-PATH is nil, defaults to current buffer
  955.      file as CLASS-PATH.  If optional LIB-TABLE-P is non-nil, add to
  956.      Library Environment, otherwise add to System Environment.  If
  957.      optional SAVE-FILE is t, the Environment is then stored to the
  958.      filename given by BR-ENV-FILE.  If SAVE-FILE is non-nil and not t,
  959.      its string value is used as the file to which to save the
  960.      Environment.
  961.  
  962. `br-ancestors  {`a'}'
  963.      Display ancestor tree whose root is the current class.  With
  964.      optional prefix ARG, display all ancestor trees whose roots are
  965.      visible classes at the current level.  ARG = -1 inverts current
  966.      class ancestry tree.  That is, it shows branches going down
  967.      towards the root class, so that parents appear above children.
  968.      ARG < -1 inverts all ancestry trees.
  969.  
  970. `br-at  {`@'}'
  971.      Display current class location in the inheritance graph.  The
  972.      class is displayed among both its ancestors and descendants.  With
  973.      optional prefix ARG, display location for all visible classes at
  974.      the current level.
  975.  
  976. `br-buffer-menu  {`b'}'
  977.      Display selection list of buffers with attached files in viewer
  978.      window.
  979.  
  980. `br-children  {`c'}'
  981.      Display children of current class.  With optional prefix ARG,
  982.      display children of all visible classes at the current level.
  983.  
  984. `br-class-stats  {`M-c'}'
  985.      Display statistics summary for current class.  Optional prefix arg
  986.      PROMPT means prompt for class name.
  987.  
  988. `br-copyright'
  989.      Display browser copyright information in viewer window.
  990.  
  991. `br-count  {`#'}'
  992.      Count number of classes visible in current listing buffer.  Print
  993.      text result in minibuffer when called interactively.
  994.  
  995. `br-delete  {`C-c C-d'}'
  996.      Delete class from current Environment.  Optional prefix arg PROMPT
  997.      means prompt for class name.
  998.  
  999. `br-descendants  {`d'}'
  1000.      Display descendant tree whose root is the current class.  With
  1001.      optional prefix ARG, display all descendant trees whose roots are
  1002.      visible classes at the current level.
  1003.  
  1004. `br-edit-entry  {`e'}'
  1005.      Edits source for any browser listing entry, such as a class or a
  1006.      feature.  Optional prefix arg PROMPT means prompt for entry name.
  1007.  
  1008. `br-env-create  {`C-c C-c'}'
  1009.      Create and save the specification of a new OO-Browser Environment.
  1010.      Interactively prompt for the Environment file name or use optional
  1011.      ENV-FILE.  Interactively prompt for the Environment language to
  1012.      use or use optional LANG-PREFIX as language indicator.  Return the
  1013.      name of the Envir spec file created.  Do not build the
  1014.      Environment.  Use 'br-env-build' to construct an Environment from
  1015.      its specification.
  1016.  
  1017. `br-env-load  {`C-c C-l'}'
  1018.      Load browser Environment or spec from optional ENV-FILE or
  1019.      'br-env-file'.  Non-nil PROMPT means prompt user before building
  1020.      tables.  Non-nil NO-BUILD means skip build of Environment entirely.
  1021.      Return t if load is successful, else nil.
  1022.  
  1023. `br-env-rebuild  {`C-c C-e'}'
  1024.      Rescan System and Library sources associated with the current
  1025.      Environment.
  1026.  
  1027. `br-env-save  {`C-c C-s'}'
  1028.      Save changed Environment to file given by optional SAVE-FILE or
  1029.      'br-env-file'.
  1030.  
  1031. `br-env-stats  {`M-e'}'
  1032.      Display summary for current Environment in viewer window.  With
  1033.      optional prefix ARG, display class totals in minibuffer.
  1034.  
  1035. `br-exit-level  {`x'}'
  1036.      Return to prefix ARGth previous inheritance level listing.  The
  1037.      command is ignored with ARG < 1.
  1038.  
  1039. `br-find'
  1040.      Interactively completes class or feature ELEMENT-NAME and jumps to
  1041.      its definition.  Returns ELEMENT-NAME or signals an error.
  1042.  
  1043. `br-feature-signature  {`F'}'
  1044.      Show full feature signature in the view window.  With optional
  1045.      prefix ARG, display signatures of all features from the current
  1046.      buffer.
  1047.  
  1048. `br-help  {`h'}'
  1049.      Display browser operation help information in viewer window.
  1050.  
  1051. `br-help-ms  {`H'}'
  1052.      Display browser mouse usage help information in viewer window.
  1053.  
  1054. `br-entry-info  {`i'}'
  1055.      Display attributes of the current entry in the viewer window.
  1056.  
  1057. `br-implementors  {`I'}'
  1058.      Display hierarchy of classes that define current feature.  Ignore
  1059.      inherited features.  With optional prefix ARG, display
  1060.      implementors of all features at the current level.
  1061.  
  1062. `br-kill  {`C-c C-k'}'
  1063.      Kill buffer in viewer window and redisplay help text.
  1064.  
  1065. `br-lib-top-classes  {`l'}'
  1066.      Display list of top level Library classes.  With prefix ARG,
  1067.      display all Library classes.
  1068.  
  1069. `br-lib-rebuild  {`L'}'
  1070.      Rescan Library components of the current Environment.
  1071.  
  1072. `br-match  {`m'}'
  1073.      Show all class names in current Environment that contain optional
  1074.      EXPR.  Nil value of EXPR means prompt for a value.  With optional
  1075.      prefix ARG, EXPR is treated as a string.  By default, it is
  1076.      treated as a regular expresion.  AGAIN non-nil shows the number of
  1077.      classes MATCHED from the last search, allowing repeated narrowing
  1078.      of the search set.  Empty EXPR when AGAIN is nil matches to all
  1079.      classes in the Environment.
  1080.  
  1081. `br-match-entries  {`M'}'
  1082.      Show all entries in current listing that contain optional EXPR.
  1083.      Nil value of EXPR means prompt for a value.  With optional prefix
  1084.      ARG, EXPR is treated as a string.  By default, it is treated as a
  1085.      regular expresion.  AGAIN non-nil means show the number of entries
  1086.      MATCHED from last search, allowing repeated narrowing of the
  1087.      search set.  Empty EXPR when AGAIN is nil matches to all entries
  1088.      in the listing.
  1089.  
  1090. `br-next-entry  {`C-n'}'
  1091.      Move point vertically down prefix ARG number of lines in listing
  1092.      buffer.
  1093.  
  1094. `br-order  {`o'}'
  1095.      Order current browser listing window entries.  With prefix ARG
  1096.      other than 1 (the default), don't remove leading space from entry
  1097.      lines before ordering.  Negative ARG means order in descending
  1098.      Ascii sequence, otherwise order in ascending sequence.
  1099.  
  1100. `br-parents  {`p'}'
  1101.      Display parents of current class.  With optional prefix ARG,
  1102.      display parents of all visible classes at the current level.
  1103.  
  1104. `br-prev-entry  {`C-p'}'
  1105.      Move point vertically up prefix ARG number of lines in listing
  1106.      buffer.
  1107.  
  1108. `br-quit  {`q'}'
  1109.      Quit browser.  With optional prefix ARG, delete window
  1110.      configurations and listing buffers associated with the browser.
  1111.  
  1112. `br-refresh  {`C-c C-r'}'
  1113.      Restore OO-Browser to its state upon startup.
  1114.  
  1115. `br-resize-narrow  {`C-x -'}'
  1116.      Resize listing windows so are narrower by 10 characters.
  1117.  
  1118. `br-resize-widen  {`C-x +'}'
  1119.      Resize listing windows so are wider by 10 characters.
  1120.  
  1121. `br-features  {`f'}'
  1122.      Display features/elements of the current class (prefix ARG = 1) or
  1123.      of the current listing if ARG is other than 0 or 1.
  1124.  
  1125.      With ARG = 0, the value of the variable,
  1126.      BR-INHERITED-FEATURES-FLAG, is toggled and no other action is
  1127.      taken.
  1128.  
  1129.      If BR-INHERITED-FEATURES-FLAG is `t', all features of each class
  1130.      are shown.  If `nil', only lexically included features are shown
  1131.      and if the features of a single class are requested and none are
  1132.      defined, the class definition is displayed so that its feature
  1133.      declarations may be browsed.
  1134.  
  1135. `br-sys-rebuild  {`S'}'
  1136.      Rescan System components of the current Environment.
  1137.  
  1138. `br-sys-top-classes  {`s'}'
  1139.      Display list of top level System classes.  With prefix ARG,
  1140.      display all System classes.
  1141.  
  1142. `br-to-from-viewer  {`C-c C-v'}'
  1143.      Move point to viewer window or back to last recorded listing
  1144.      window.
  1145.  
  1146. `br-toggle-keep-viewed'
  1147.      Toggle the value of the BR-KEEP-VIEWED-CLASSES flag.
  1148.  
  1149. `br-top-classes  {`t'}'
  1150.      Display list of top level classes.  With prefix ARG, display all
  1151.      Environment classes.
  1152.  
  1153. `br-unique  {`u'}'
  1154.      Eliminate adjacent duplicate entry names from the current listing
  1155.      window.  If two adjacent entries look the same one is eliminated,
  1156.      even if they refer to different class elements.
  1157.  
  1158. `br-version  {`C-c #'}'
  1159.      Display browser version number.
  1160.  
  1161. `br-view-entry  {`v'}'
  1162.      Displays source for any browser listing entry.  Optional prefix
  1163.      arg PROMPT means prompt for entry name.
  1164.  
  1165. `br-view-friend {`V'}'
  1166.      With point on a friend listing entry, view its source code
  1167.      definition.  With optional OTHER-WIN non-nil, display in another
  1168.      window.  With optional SIG-AT-POINT-FLAG non-nil, assume point is
  1169.      within a friend signature in a source buffer.
  1170.  
  1171. `br-view-full-frame  {`1'}'
  1172.      Use full frame to display contents of viewer window.
  1173.  
  1174. `br-viewer-scroll-down  {`DEL'}'
  1175.      Scroll viewer window downward ARG lines or a windowful if no ARG.
  1176.  
  1177. `br-viewer-scroll-up  {`SPC'}'
  1178.      Scroll viewer window upward ARG lines or a windowful if no ARG.
  1179.  
  1180. `br-where  {`w'}'
  1181.      Display in minibuffer and return full path of a browser listing
  1182.      entry.  Optional prefix arg PROMPT means prompt for entry name."
  1183.  
  1184. `br-write-buffer  {`C-c C-w'}'
  1185.      Write narrowed portion of current browser buffer to a file.
  1186.  
  1187. `br-tree  {`M-d'}'
  1188.      Start the `xbr' application with descendency tree of current class.
  1189.      With optional prefix ARG, a descendency tree for each class in
  1190.      current buffer.
  1191.  
  1192. `br-tree-graph  {`M-g'}'
  1193.      Start the appropriate tree application with the tree from current
  1194.      listing buffer.
  1195.  
  1196. `br-tree-kill  {`M-k'}'
  1197.      Prompt user whether to kill all `xbr' sub-processes.
  1198.  
  1199. `br-tree-features-toggle  {`M-f'}'
  1200.      Toggle between showing features and hiding them when `br-tree' is
  1201.      invoked to display descendants graphically.
  1202.  
  1203.